package com.baymax.security.entity;

import com.baymax.entity.vo.SysRoleVO;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * 认证授权 用户类
 *
 * @Author: baymax
 * @CreateTime: 2023/3/28 23:31
 * @Version: 1.0
 */
@Data
public class SecurityUser implements UserDetails, Serializable {

    private Long userId;

    private String username;

    private String password;

    private List<SysRoleVO> roleVOList;

    private Set<String> menuPermissionList;

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return roleVOList.stream().map(item -> new SimpleGrantedAuthority(item.getRoleTag())).collect(Collectors.toList());
    }

    @Override
    public String getPassword() {
        return password;
    }

    @Override
    public String getUsername() {
        return username;
    }

    /**
     * 指示用户的帐户是否已过期。过期的帐号无法进行认证。
     * 返回: 如果用户帐户有效(即未过期)则为True，如果不再有效(即过期)则为false
     */
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    /**
     * 显示当前用户是否被锁定或解锁。被锁定的用户无法进行认证。
     * 返回: 如果用户未被锁定，则为True，否则为false
     */
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    /**
     * 指示用户的凭据(密码)是否过期。过期的凭据会阻止身份验证。
     * 返回: 如果用户凭证有效(即未过期)则为True，如果不再有效(即过期)则为false
     */
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    /**
     * 指示是否启用或禁用用户。禁用的用户无法进行认证。
     * 返回: 如果用户已启用，则为True，否则为false
     */
    @Override
    public boolean isEnabled() {
        return true;
    }

}
